like, case insensitive, cestina
Otázka od: ing. Petr Borkovec
8. 11. 2004 15:27
Delphi 7, InterBase WI - 06.0.1.6.
Potrebuji prohledat pole tabulky, aby hledani bylo case insensitive a
fungovalo v cestine. Pole je varchar(10000). Tabulku ctu komponentou
IBQuery, pro hledani vkladam do jeji vlastnosti SQL
'select * from
tab_archiv where UPPER(OBSAH) LIKE upper(_WIN1250'hodnota1.Text')',do
hodnota1.text davam '%toto je treba najit%'.Takto je vysledek hledani case
insensitive pro vsechna pismena s vyjimkou pismen s diakritikou, kde to
zustava case sensitive. Mohl by nekdo poradit?
Odpovedá: Tomas Krejzek
8. 11. 2004 16:18
Musis si udelat upper uz nad tim textem v aplikaci, tj. v C++ Builderu
hodnota1.text.UpperCase() predpokladam ze v Delphi je to to samy
Tomas
>hodnota1.text davam '%toto je treba najit%'.Takto je vysledek hledani case
>insensitive pro vsechna pismena s vyjimkou pismen s diakritikou, kde to
>zustava case sensitive. Mohl by nekdo poradit?
>
>
>
>
>
Odpovedá: ing. Petr Borkovec
10. 11. 2004 21:36
Zkusil jsem, co napsal Tomas - to nepomohlo. Problem je zrejme v tom, ze v
tom 'select * from tab_archiv where UPPER(OBSAH) LIKE '%TOTO JE TREBA
NAJIT%'' to UPPER(OBSAH)prevadi na velka pismena jen znaky bez diakritiky -
ale nevim, jak to vyresit.
> Musis si udelat upper uz nad tim textem v aplikaci, tj. v C++ Builderu
> hodnota1.text.UpperCase() predpokladam ze v Delphi je to to samy
> Tomas
> > Delphi 7, InterBase WI - 06.0.1.6.
> > Potrebuji prohledat pole tabulky, aby hledani bylo case insensitive a
> > fungovalo v cestine. Pole je varchar(10000). Tabulku ctu komponentou
> > IBQuery, pro hledani vkladam do jeji vlastnosti SQL
'select * from
> > tab_archiv where UPPER(OBSAH) LIKE upper(_WIN1250'hodnota1.Text')',do
> > hodnota1.text davam '%toto je treba najit%'.Takto je vysledek hledani
case
> > insensitive pro vsechna pismena s vyjimkou pismen s diakritikou, kde to
> > zustava case sensitive. Mohl by nekdo poradit?
Odpovedá: Jiri Cincura
10. 11. 2004 23:00
ing. Petr Borkovec wrote:
> NAJIT%'' to UPPER(OBSAH)prevadi na velka pismena jen znaky bez diakritiky
> - ale nevim, jak to vyresit.
Presne tak. Kdysi jsem to resil a na nic jineho jsem neprisel. Laboroval
jsem s SQL (nic) s nastavenim DB (nic, ale na tohle bych sazel) s nastavenim
komponent (nic, uz jsem byl zoufaly).
Ja to vyresil tak, ze - vzhledem k tomu, ze se nic nezobrazovalo, jen
hledalo jako vazebna relace - jsem to do DB cpal rovnou vsechno velke. Dost
divne, ale jedine co znam.
Mozna Pavel Cisar bude neco vedet.
--
Jiri Cincura
e-mail: mailto:jiri@cincura.net; | http://www.cincura.net/
mailto:xcincura@informatics.muni.cz | http://photo.cincura.net/
ICQ: 314711544 | http://phorum.cincura.net/
---
And if our times are difficult and perplexing,
so are they challenging and filled with opportunity.
-Robert F. Kennedy, 1961
Odpovedá: Kalhous
11. 11. 2004 5:52
> ing. Petr Borkovec wrote:
>> NAJIT%'' to UPPER(OBSAH)prevadi na velka pismena jen znaky bez diakritiky
>> - ale nevim, jak to vyresit.
Nezachytil jsem puvodni dotaz ale pokud se jedna o IB nebo FB tak prevod
znaku s diakritikou na velka funguje takto
UPPER(OBSAH COLLATE PXW_CSY)
samozrejme kdyz je to cestina, pro jine jazyky jiny collate. A drobnost -
nektere IB/FB nesnaseji kdyz je UPPER v ORDER BY frazi.
Odpovedá: Tomas Krejzek
11. 11. 2004 8:19
A jak mas nadefinovane ty polozky v databazich, mas je v CP-1250 a v
PXW_CSY, protoze ja jsem si to zkousel u sebe a tam to tu cestinu zvlada
naprosto bez problemu.
Tom
ing. Petr Borkovec napsal(a):
>Zkusil jsem, co napsal Tomas - to nepomohlo. Problem je zrejme v tom, ze v
>tom 'select * from tab_archiv where UPPER(OBSAH) LIKE '%TOTO JE TREBA
>NAJIT%'' to UPPER(OBSAH)prevadi na velka pismena jen znaky bez diakritiky -
>ale nevim, jak to vyresit.
>
>
>
>>Musis si udelat upper uz nad tim textem v aplikaci, tj. v C++ Builderu
>>hodnota1.text.UpperCase() predpokladam ze v Delphi je to to samy
>>Tomas
>>
>>
>
>
>
>>>Delphi 7, InterBase WI - 06.0.1.6.
>>>Potrebuji prohledat pole tabulky, aby hledani bylo case insensitive a
>>>fungovalo v cestine. Pole je varchar(10000). Tabulku ctu komponentou
>>>IBQuery, pro hledani vkladam do jeji vlastnosti SQL
'select * from
>>>tab_archiv where UPPER(OBSAH) LIKE upper(_WIN1250'hodnota1.Text')',do
>>>hodnota1.text davam '%toto je treba najit%'.Takto je vysledek hledani
>>>
>>>
>case
>
>
>>>insensitive pro vsechna pismena s vyjimkou pismen s diakritikou, kde to
>>>zustava case sensitive. Mohl by nekdo poradit?
>>>
>>>
>
>
>
>
>
>
>
>
>
>
>
>
Odpovedá: ing. Petr Borkovec
14. 11. 2004 22:00
Dekuji za odpovedi Jirkovi, Tomasovi a Kalhousovi - nic ale nepomohlo. Mozna
take neni muj dotaz jasny. Potrebuji prohledat pole tabulky typu
varchar(1000), vyskyt nikoli jen na zacatku ale i uprostred retezce, v
cestine (character set WIN1250), aby to bylo case insensitive.
> Zkusil jsem, co napsal Tomas - to nepomohlo. Problem je zrejme v tom, ze
v
> tom 'select * from tab_archiv where UPPER(OBSAH) LIKE '%TOTO JE TREBA
> NAJIT%'' to UPPER(OBSAH)prevadi na velka pismena jen znaky bez
diakritiky -
> ale nevim, jak to vyresit.
> Musis si udelat upper uz nad tim textem v aplikaci, tj. v C++ Builderu
> hodnota1.text.UpperCase() predpokladam ze v Delphi je to to samy
> Tomas
> > Delphi 7, InterBase WI - 06.0.1.6.
> > Potrebuji prohledat pole tabulky, aby hledani bylo case insensitive a
> > fungovalo v cestine. Pole je varchar(10000). Tabulku ctu komponentou
> > IBQuery, pro hledani vkladam do jeji vlastnosti SQL
'select * from
> > tab_archiv where UPPER(OBSAH) LIKE upper(_WIN1250'hodnota1.Text')',do
> > hodnota1.text davam '%toto je treba najit%'.Takto je vysledek hledani
case
> > insensitive pro vsechna pismena s vyjimkou pismen s diakritikou, kde to
> > zustava case sensitive. Mohl by nekdo poradit?
Odpovedá: Ing. Miroslav Vopalecky
14. 11. 2004 22:46
Ahoj.
Pro mlhave vyhledavani pouzivam ve spojeni s FireBirdem nasledujici kod
obsahujici NazevUdaje CONTAINING HledanyText:
procedure TfrmGrid.PodTextClick(Sender: TObject);
var st,st1,st2,st3,st4,st5,st6:string;
va1:variant;
begin
try
st:= InputBox('Zadani podmnoziny', 'Zadej hledany text:', '');
st1:=SQLKod;
st2:=DBGrid1.SelectedField.FieldName;
va1:=st;
if VarIsNull(va1) then
begin st4:='('+st2+' is null)'; end else begin st4:=va1;
st4:='('+st2+'
CONTAINING '''+st4+''''+')'; end;
if SQLVyber<>'' then
begin st5:=' WHERE '+SQLVyber+' AND '+st4; SQLVyber:=SQLVyber+' AND
'+st4;
end
else begin st5:=' WHERE '+st4; SQLVyber:=st4; end;
if SQLOrder<>'' then begin st6:=' ORDER BY '+SQLOrder; end else begin
st6:=''; end;
st3:=st1+st5+st6;
panel1.Caption:=st5+st6;
panel1.Repaint;
DM1.IBQZP01.SQL.Text:=st3;
DM1.IBQZP01.Close;
DM1.IBQZP01.Open;
repaint;
DM1.IBQZP01.fields.FindField(st2).FocusControl;
except
showmessage(self.Name+' Chyba podmnoziny.');
end;
end;
S pozdravem Mirek Vopalecky, D7 W2000
|-----Original Message-----
|From: delphi-l-owner@clexpert.cz
|[mailto:delphi-l-owner@clexpert.cz] On Behalf Of ing. Petr Borkovec
|Sent: Sunday, November 14, 2004 10:00 PM
|To: delphi-l@clexpert.cz
|Subject: Re: like, case insensitive, cestina
|
|
|Dekuji za odpovedi Jirkovi, Tomasovi a Kalhousovi - nic ale
|nepomohlo. Mozna take neni muj dotaz jasny. Potrebuji
|prohledat pole tabulky typu varchar(1000), vyskyt nikoli jen
|na zacatku ale i uprostred retezce, v cestine (character set
|WIN1250), aby to bylo case insensitive.
|
|
|> Zkusil jsem, co napsal Tomas - to nepomohlo. Problem je
|zrejme v tom,
|> ze
|v
|> tom 'select * from tab_archiv where UPPER(OBSAH) LIKE '%TOTO
|JE TREBA
|> NAJIT%'' to UPPER(OBSAH)prevadi na velka pismena jen znaky bez
|diakritiky -
|> ale nevim, jak to vyresit.
|
|> Musis si udelat upper uz nad tim textem v aplikaci, tj. v
|C++ Builderu
|> hodnota1.text.UpperCase() predpokladam ze v Delphi je to to
|samy Tomas
|
|> > Delphi 7, InterBase WI - 06.0.1.6.
|> > Potrebuji prohledat pole tabulky, aby hledani bylo case
|insensitive
|> > a fungovalo v cestine. Pole je varchar(10000). Tabulku ctu
|> > komponentou IBQuery, pro hledani vkladam do jeji vlastnosti SQL
|> >
'select * from tab_archiv where UPPER(OBSAH) LIKE
|> > upper(_WIN1250'hodnota1.Text')',do
|> > hodnota1.text davam '%toto je treba najit%'.Takto je
|vysledek hledani
|case
|> > insensitive pro vsechna pismena s vyjimkou pismen s
|diakritikou, kde
|> > to zustava case sensitive. Mohl by nekdo poradit?
Odpovedá: Jiri Cincura
14. 11. 2004 23:08
No ale to nam porad neresi to, ze UPPER(sloupec) kde sloupec obsahuje
diakritiku neudela z ceskych znaku velke.
--
Jiri Cincura
e-mail: mailto:jiri@cincura.net; | http://www.cincura.net/
mailto:xcincura@informatics.muni.cz | http://photo.cincura.net/
ICQ: 314711544 | http://phorum.cincura.net/
---
And if our times are difficult and perplexing,
so are they challenging and filled with opportunity.
-Robert F. Kennedy, 1961
Odpovedá: Jiri Cincura
14. 11. 2004 23:10
ing. Petr Borkovec wrote:
> Dekuji za odpovedi Jirkovi, Tomasovi a Kalhousovi - nic ale nepomohlo.
Hele tohle funguje!!!!!!!!!!!!!!!!!!!!!!!!!!
select upper(id collate PXW_CSY) from pokus;
i diakritiku mi to prevedlo
--
Jiri Cincura
e-mail: mailto:jiri@cincura.net; | http://www.cincura.net/
mailto:xcincura@informatics.muni.cz | http://photo.cincura.net/
ICQ: 314711544 | http://phorum.cincura.net/
---
And if our times are difficult and perplexing,
so are they challenging and filled with opportunity.
-Robert F. Kennedy, 1961
Odpovedá: Jiri Cincura
14. 11. 2004 23:16
Teda tohle mi jede:
select * from pokus where upper(id collate PXW_CSY) like '%C%';
--
Jiri Cincura
e-mail: mailto:jiri@cincura.net; | http://www.cincura.net/
mailto:xcincura@informatics.muni.cz | http://photo.cincura.net/
ICQ: 314711544 | http://phorum.cincura.net/
---
And if our times are difficult and perplexing,
so are they challenging and filled with opportunity.
-Robert F. Kennedy, 1961
Odpovedá: Kalhous
15. 11. 2004 8:25
No to jsem prave presvedceny ze to musi byt napsano takto:
...where UPPER(OBSAH COLLATE PXW_CSY) LIKE '%TOTO JE TREBA NAJIT%'
a prekvapuje me ze to nefunguje. Mozna je to verzi serveru, jak jsem uz psal
tak ke svemu
zdeseni jsem zjistil ze nektere verze serveru nesnaseji treba UPPER v ORDER
BY zatimco
jinym to nevadi.
----- Original Message -----
>> tom 'select * from tab_archiv where UPPER(OBSAH) LIKE '%TOTO JE TREBA
>> NAJIT%'' to UPPER(OBSAH)prevadi na velka pismena jen znaky bez
> diakritiky -
Odpovedá: Jiri Cincura
15. 11. 2004 8:31
Kalhous wrote:
> psal tak ke svemu zdeseni jsem zjistil ze nektere verze serveru nesnaseji
No na FB 1.5.1 mi to jede.
A na IB (verze co je s D7 ;)) taky.
Tak jinak uz pak nevim.
--
Jiri Cincura
e-mail: mailto:jiri@cincura.net; | http://www.cincura.net/
mailto:xcincura@informatics.muni.cz | http://photo.cincura.net/
ICQ: 314711544 | http://phorum.cincura.net/
---
And if our times are difficult and perplexing,
so are they challenging and filled with opportunity.
-Robert F. Kennedy, 1961